package com.hospital.workstation.service;

import com.hospital.common.core.domain.R;
import com.hospital.workstation.domain.PharmaceuticalCare;
import com.hospital.workstation.domain.vo.PharmaceuticalCareVo;
import com.hospital.workstation.domain.bo.PharmaceuticalCareBo;
import com.hospital.common.core.page.TableDataInfo;
import com.hospital.common.core.domain.PageQuery;

import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 药学监护记录Service接口
 *
 * @author whb
 * @date 2023-02-15
 */
public interface IPharmaceuticalCareService {

    /**
     * 查询药学监护记录
     */
    PharmaceuticalCareVo queryById(Long id);

    /**
     * 查询药学监护记录列表
     */
    TableDataInfo<PharmaceuticalCareVo> queryPageList(PharmaceuticalCareBo bo, PageQuery pageQuery);

    /**
     * 查询药学监护记录列表
     */
    List<PharmaceuticalCareVo> queryList(PharmaceuticalCareBo bo);

    /**
     * 新增药学监护记录
     */
    R<Void> insertByBo(PharmaceuticalCareBo bo);

    /**
     * 修改药学监护记录
     */
    Boolean updateByBo(PharmaceuticalCareBo bo);

    /**
     * 校验并批量删除药学监护记录信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 查询药学监护记录
     *
     * @param medicalRecordNo 病历号
     * @return
     */
    PharmaceuticalCareVo queryByMedicalRecordNo(Integer medicalRecordNo);

    /**
     * 下载出院用药教育
     *
     * @param response
     * @param medicalRecordNo 药历号
     */
    void exportWord(HttpServletResponse response, Integer medicalRecordNo);

    /**
     * 下载药学监护记录
     *
     * @param response
     * @param medicalRecordNo
     */
    void exportPharmaceuticalCareRecord(HttpServletResponse response, Integer medicalRecordNo);

    /**
     * 获取药学监护记录集合
     *
     * @param medicalRecordNo 药历号
     * @return
     */
    Map<String, Object> getPharmaceuticalCareMap(Integer medicalRecordNo);

    /**
     * 获取出院教育用药集合
     * @param medicalRecordNo 药历号
     * @return
     */
    Map<String,Object> getEducationMap(Integer medicalRecordNo);

    /**
     * 根据ID删除监护记录
     * @param id 药学监护详情id
     * @return
     */
    R<Void> removeById(Long id);
}
